package ycl.common.base.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import ycl.common.base.entity.BaseEntity;
import ycl.common.models.BaseEntityRes;
import ycl.common.models.req.BaseReq;

import javax.servlet.http.HttpServletRequest;

/**
 * 逻辑层基类
 *
 * @author: YCL
 * @date: 2021-06-04 23:59:56
 */
public interface BaseService<T extends BaseEntity, Q extends BaseReq, R extends BaseEntityRes> extends IService<T> {


	/**
	 * 分页
	 *
	 * @param t
	 * @return
	 */
	Page<T> pageList(T t);

	Page<R> pageList(T t, Class<R> c);

	/**
	 * 根据id获取数据, 用户必须登录
	 *
	 * @param request 用户登录请求头
	 * @param id      对象id
	 * @param c       详细数据表类型
	 * @return
	 */
	T getById(HttpServletRequest request, Long id, Class<T> c);

	/**
	 * 保存数据, 用户必须登录
	 *
	 * @param request 用户登录请求头
	 * @param q       请求体
	 * @param t       真实需要保存的类
	 */
	void save(HttpServletRequest request, Q q, Class<T> t);

	/**
	 * 修改数据, 用户必须登录
	 *
	 * @param request 用户登录请求头
	 * @param q       请求体
	 * @param t       真实需要保存的类
	 */
	void update(HttpServletRequest request, Q q, Class<T> t);
}
